package com.hb;

import com.hb.domain.Spitter;
import com.hb.domain.Spittle;
import com.hb.service.SpitterService;
import org.springframework.beans.factory.annotation.Autowired;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.List;

public class RMIHelper {
    public void RMIClient() {
        /**
         * 传统上，RMI 客户端必须使用 RMI API 的 Naming 类从 RMI 注册表中查找服务。例如，下面的代码片段演示了如何获取 Spitter 的 RMI 服务。
         */
        try {
            String serviceUrl = "rmi:/spitter/SpitterService";
            SpitterService spitterService = (SpitterService) Naming.lookup(serviceUrl);
        } catch (RemoteException e) {

        } catch (NotBoundException e) {

        } catch (MalformedURLException e) {

        }
    }

    // 此处注入的是 RmiProxyFactoryBean 所代理的 SpitterService 实现类。
    // 客户端代码甚至不需要知道所处理的是一个 RMI 服务。它只是通过注入机制接受了一个 SpitterService 对象，根本不必关心它来自何处。实际上，谁知道客户端得到的
    // 就是一个基于 RMI 的实现呢？
    @Autowired
    private SpitterService spitterService;

    public List<Spittle> getSpittles(String username) {
        Spitter spitter = spitterService.getSpitter(username);
        return spitterService.getSpittlesForSpitter(spitter);
    }
}
